﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.pir2
    最小二乘曲面拟合
    参数 x: x[n]存放给定数据点的X坐标。
    参数 y: y[n]存放给定数据点的Y坐标。
    参数 z: z[n][m]存放给定n*m个网点上函数值。
    参数 n: X坐标个数。
    参数 m: Y坐标个数。
    参数 a: a[p][q]返回二元拟合多项式的系数。
    参数 p: 拟合多项式中x的最高次为p-1。要求p<=min(n,20)。
    参数 q: 拟合多项式中y的最高次为q-1。要求q<=min(n,20)。
    参数 dt: dt[3]分别返回误差平方和，误差绝对值之和与误差绝对值的最大值。
    */

    public static string drive_pir2()
    {
        int i, j;
        double[] x = new double[11];
        double[] y = new double[21];
        double[,] z = new double[11, 21];
        double[,] a = new double[6, 5];
        double[] dt = new double[3];
        for (i = 0; i <= 10; i++)
            x[i] = 0.2 * i;
        for (i = 0; i <= 20; i++)
            y[i] = 0.1 * i;
        for (i = 0; i <= 10; i++)
            for (j = 0; j <= 20; j++)
                z[i, j] = Math.Exp(x[i] * x[i] - y[j] * y[j]);
        gl.pir2(x, y, z, 11, 21, a, 6, 5, dt);

        string rs = "";
        rs += gl.html_table("X:", x);
        rs += gl.html_table("Y:", y);
        rs += gl.html_table("Z:", z);
        rs += gl.html_table("二元拟合多项式系数矩阵:", a);
        rs += gl.html_table("误差平方和,误差绝对值和,误差绝对值最大值:", dt);

        return rs;
    }
}